// 原型模式

package prototype

import "fmt"

// 定义接口，需要实现clone方法
type Painter interface {
	Clone() Painter
	DrawCrcle()
	SetColor(color string)
	GetColor() string
}

type PainterA struct {
	color string
}

func (p *PainterA) Clone() Painter {
	return &PainterA{p.color}
}

func (p *PainterA) DrawCrcle() {
	fmt.Println("PainterA DrawCircle")
}

func (p *PainterA) SetColor(color string) {
	p.color = color
}

func (p *PainterA) GetColor() string {
	return p.color
}

/*
func main() {
	// 原型模式就是需要提供clone的接口，实现对对象的拷贝
	a := PainterA{}
	a.SetColor("red")
	b := a.Clone()
	fmt.Println(b.GetColor()) // red 拷贝后继承属性
	b.SetColor("blue")
	fmt.Println(a.GetColor()) // red 原对象没有改变
}
*/
